package com.lee.tools;

import java.security.Key;
import java.util.Date;

import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

public class TokenJwt {
	
	static String key="Lile@224*HrX114*1995";
	
	//生成token
	public static String createJWT(String id,long ttlMillis) {		
		
		//使用HS256进行加密
    	SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
    	
    	//获取当前的时间
    	long nowMills = System.currentTimeMillis();    	
    	Date now = new Date(nowMills);  
    	    	
    	//获取key的64编码字符串
    	byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(key); 
    	//生成秘钥
    	Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
    	
       	//添加构成JWT的参数
    	JwtBuilder builder = Jwts.builder().setId(id)
    			.setIssuedAt(now)
    			.signWith(signatureAlgorithm, signingKey);
    	
    	//添加token过期时间
    	if (ttlMillis >= 0) {
    		//这里根据多久过期的时间加上现在的时间，得到具体过期的日期和时分秒
    		//等用户使用这个token来请求的时候先获取这里的时间看是否过期
    		long expMillis = nowMills + ttlMillis;    		
    		Date exp = new Date(expMillis);    		
    		builder.setExpiration(exp);
    	}
    	
    	//返回JWT
    	return builder.compact();   			
	}
	
	//解析token
	public static Claims parseJWT(String jwt) {
		Claims claims = Jwts.parser()
				.setSigningKey(DatatypeConverter.parseBase64Binary(key))
				.parseClaimsJws(jwt).getBody();
		
		return claims;
	}
	
}
